package com.shop.service;

import com.shop.dto.OrderDTO;
import com.shop.entity.Order;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 订单服务接口
 * 
 * 定义订单相关的业务逻辑方法
 * 
 * @author Shop Management System
 * @version 1.0
 * @since 2024-01-01
 */
public interface OrderService {
    
    /**
     * 创建订单
     * 
     * @param orderDTO 订单信息
     * @return 创建的订单信息
     */
    Order createOrder(OrderDTO orderDTO);
    
    /**
     * 根据ID获取订单
     * 
     * @param id 订单ID
     * @return 订单信息
     */
    Order findOrderById(Long id);
    
    /**
     * 根据订单号获取订单
     * 
     * @param orderNumber 订单号
     * @return 订单信息
     */
    Order findOrderByNumber(String orderNumber);
    
    /**
     * 根据会员ID获取订单列表
     * 
     * @param memberId 会员ID
     * @return 订单列表
     */
    List<Order> findOrdersByMemberId(Long memberId);
    
    /**
     * 根据订单状态获取订单列表
     * 
     * @param status 订单状态
     * @return 订单列表
     */
    List<Order> findOrdersByStatus(String status);
    
    /**
     * 根据时间范围获取订单列表
     * 
     * @param startDate 开始时间
     * @param endDate 结束时间
     * @return 订单列表
     */
    List<Order> findOrdersByDateRange(LocalDateTime startDate, LocalDateTime endDate);
    
    /**
     * 更新订单状态
     * 
     * @param id 订单ID
     * @param status 新状态
     */
    void updateOrderStatus(Long id, String status);
    
    /**
     * 根据时间范围统计总销售额
     * 
     * @param startDate 开始时间
     * @param endDate 结束时间
     * @return 总销售额
     */
    Double getTotalSalesByDateRange(LocalDateTime startDate, LocalDateTime endDate);
    
    /**
     * 获取所有订单
     * 
     * @return 订单列表
     */
    List<Order> findAllOrders();

    void deleteOrderById(Long id);
} 